A cache memory has conventionally been utilized for shortening the access time of main memory thus improving the processing performance of a processor. Cache is effective due to memory access locality. There are two types of locality. First there is the spatial locality where data and codes adjacent to each other tends to be accessed together. There is the temporal locality where data and code accessed commonly can be cached in a smaller memory for further accesses.
The extensive uses of on-chip cache memories have become essential to sustaining the memory bandwidth demand on processors and to reduce the average memory access latency. Advances in semiconductor technology and continuous downscaling of feature size creates extra-space for additional functionality on a single chip. The most popular way to make use of this extra space is to integrate a cache memory (or a hierarchy of caches) with high capacity so that a processor is able to perform better.